package controladores;

import entidades.Viaje;
import utils.Constantes;
import utils.json.JSONParser;

public class ControladorViajes extends BaseControlador
{
	public ControladorViajes()
	{
		super(Constantes.URL_COMPLETA + Constantes.Viajes.SERVICIO);
	}
	
	/**
	 * Obtiene el viaje ACTIVO de un chofer dado.
	 * @param idChofer la id del chofer.
	 * @return el viaje, si lo hay.
	 */
	public Viaje getViajeChofer (long idChofer)
	{
		return getViaje(Constantes.Viajes.VIAJE_CHOFER, idChofer);
	}
	
	/**
	 * Obtiene el viaje ACTIVO de un pasajero dado.
	 * @param idPasajero la id del pasajero.
	 * @return el viaje, si lo hay.
	 */
	public Viaje getViajePasajero (long idPasajero)
	{
		return getViaje(Constantes.Viajes.VIAJE_PASAJERO, idPasajero);
	}
	
	/**
	 * Obtiene el viaje activo de un usuario.
	 * @param path ubicacion del servicio para obtener el viaje.
	 * @param id la id del usuario.
	 * @return el viaje activo, si lo hay.
	 */
	private Viaje getViaje (String path, long id)
	{
		String res = helper.doGet(path + "?id=" + id);
		
		if (res != null)
			return new JSONParser<Viaje>(Viaje.class).fromJson(res);
		
		return null;
	}
	
	/**
	 * Inicia un viaje. Un viaje es iniciable si su estado es asignado.
	 * @param id la id del viaje.
	 * @return true si la operacion se pudo completar.
	 */
	public boolean iniciarViaje (long id)
	{
		String res = helper.doGet(Constantes.INICIAR_VIAJE + "?id=" + id);
		
		return Boolean.valueOf(res);
	}
	
	/**
	 * Acepta un viaje.
	 * @param idChofer la id del chofer aceptador.
	 * @param idViaje la id del viaje a aceptar.
	 * @return el viaje si la operacion se pudo completar. Null caso contrario.
	 */
	public Viaje aceptarViaje (long idChofer, long idViaje)
	{
		String res = helper.doGet(Constantes.ACEPTAR + "?id_chofer=" + idChofer + "&id_viaje=" + idViaje);
		
		if (res != null)
			return new JSONParser<Viaje>(Viaje.class).fromJson(res);
		
		return null;
	}
	
	public void rechazarViaje (long idChofer, long idViaje)
	{
		helper.doGet(Constantes.Viajes.RECHAZAR + "?idChofer=" + idChofer + "&idViaje=" + idViaje);
	}
	
	public String getTiempoEstimado (long idViaje)
	{
		return helper.doGet(Constantes.Viajes.TIEMPO_ESTIMADO + "?id=" + idViaje);
	}
	
	
}
